addHook("PreThinkFrame", do
		for p in players.iterate
            if p.chargebounce

			if p.spectator then continue end -- Spectating? Then you have normal spectating controls.
			local cmd = p.cmd
			cmd.buttons = $ | BT_JUMP -- Ignore anything but Jump input
		end
	end
end)

addHook("PlayerThink", function(player)
	if player.mo and player.mo.valid
		if player.mo.skin == "fang"
        
            local fangs = player
            
            local fang = fangs.mo
            
            if fangs.chargebounce == nil then
                fangs.chargebounce = false
            end
            if not fangs.charge then
                fangs.charge = 0
            end
            if (fangs.pflags & PF_THOKKED)
            and (fang.state == S_PLAY_BOUNCE)
            and not (P_IsObjectOnGround(fang))
            and (fangs.cmd.buttons & BT_CUSTOM1)
                if not (fangs.chargebounce)
                    fangs.chargebounce = true
                end
            end
            //Charge Bounce
            if fangs.chargebounce
                if ((leveltime % 10 == 0))
                    local chargebody = P_SpawnGhostMobj(fang)
                    chargebody.color = SKINCOLOR_WHITE
                    chargebody.blendmode = AST_ADD
                    chargebody.state = S_PLAY_BOUNCE
                    P_TryMove(chargebody, fang.x, fang.y, true)
                end
                fangs.charge = $ + 1
                fang.state = S_PLAY_BOUNCE
                if not (fangs.cmd.buttons & BT_CUSTOM1)
                    fangs.chargebounce = false
                    if fangs.charge >= 20
                       P_SetObjectMomZ(fang, -10*FRACUNIT, false) 
                       S_StartSound(fang, sfx_s3k83)
                    elseif fangs.charge >= 40
                       P_SetObjectMomZ(fang, -15*FRACUNIT, false)
                       S_StartSound(fang, sfx_s3k83)
                    elseif fangs.charge >= 60
                       P_SetObjectMomZ(fang, -20*FRACUNIT, false)
                       S_StartSound(fang, sfx_s3k83)
                    elseif fangs.charge >= 80
                       P_SetObjectMomZ(fang, -25*FRACUNIT, false)
                       S_StartSound(fang, sfx_s3k83)
                    end
                end
                if fangs.charge >= 100
                    fangs.charge = 0
                    fangs.chargebounce = false
                    fang.state = S_PLAY_FALL
                    S_StartSound(fang, sfx_s3k51)
                end
                fangs.powers[pw_nocontrol] = 10
                fang.momx = $*30/31
                fang.momy = $*30/31
                P_SetObjectMomZ(fang, 0, false)
            end
        end
    end
end)